/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.pattern.services;

import com.pattern.dao.KaryawanDAO;
import com.pattern.model.Karyawan;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.DataSource;

/**
 *
 * @author Rully Andhika
 */
public class CRUDService {
    
    private KaryawanDAO karyawanDao;
    private Connection koneksi;
    // Inisiasi koneksi untuk dao karyawan
    public void setDataSource(DataSource dataSource) {
        try {
            koneksi = dataSource.getConnection();
            karyawanDao = new KaryawanDAO();
            karyawanDao.setConnection(koneksi);
        } catch (SQLException ex) {
            Logger.getLogger(CRUDService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    // CRUD - CREATE and UPDATE = Insert dan Update data karyawan (operasi KaryawanDAO)
    public Karyawan save(Karyawan karyawan) {
        try {
            koneksi.setAutoCommit(false);
            karyawanDao.save(karyawan);
            koneksi.commit();
            koneksi.setAutoCommit(true);  
        } catch (SQLException ex) {
            try {
                koneksi.rollback();
            } catch (SQLException ex1) {
                Logger.getLogger(CRUDService.class.getName()).log(Level.SEVERE, null, ex1);
            }
        }
        return karyawan;
    }
    // CRUD - READ - findByNik dan getAll data karyawan (operasi KaryawanDAO)
    // findByNik - Mencari data karyawan berdasarkan nik
    public Karyawan getById(Integer id) {
        try {   
            return karyawanDao.findByNik(id);
        } catch (SQLException ex) {
            Logger.getLogger(CRUDService.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    // getAll - Menampilkan semua data karyawan yang ada
    public List<Karyawan> getAll() {
        try {
            return karyawanDao.getAll();
        } catch (SQLException ex) {
            Logger.getLogger(CRUDService.class.getName()).log(Level.SEVERE, null, ex);
        }
        return new ArrayList<Karyawan>();
    }
    // CRUD - DELETE - delete data karyawan (operasi KaryawanDAO)
    public Karyawan delete(Karyawan karyawan) {
        try {
            koneksi.setAutoCommit(false);
            karyawanDao.delete(karyawan);
            koneksi.commit();
            koneksi.setAutoCommit(true);
            return null;
        } catch (SQLException ex) {
            try {
                koneksi.rollback();
            } catch (SQLException ex1) {
                Logger.getLogger(CRUDService.class.getName()).log(Level.SEVERE, null, ex1);
            }
        }
        return karyawan;
    }
    
}
